Escrito a continuación hay un ejemplo de mi código que suelo hacer. lo que hice es..
Lo que quiero saber es que mi código está bien y es antipatrón o no.
Gracias de antemano.
const readStatusAll = data => { return new Promise( async (resolve, reject) => { try { const category = await CoreStatus.findAll() resolve(category) } catch(err) { reject(err) } }) } // Promise without Await const readStatusAll = data => { return new Promise( async (resolve, reject) => { CoreStatus.findAll() resolve(category) } }) }Lo que quiero saber es que mi código está bien y es antipatrón o no.
El primero funcionará correctamente, pero es un antipatrón.
El segundo no funcionará correctamente.
Ninguno de los bloques de código que muestra es la forma recomendada de hacer las cosas porque ambos envuelven innecesariamente una promesa existente en otra promesa creada manualmente. Esto se conoce como antipatrón. Esta primera versión funcionará correctamente, pero contiene un montón de código inútil (lo que lo convierte en un antipatrón) y con un poco más de complejidad en la función, es muy fácil cometer errores de codificación (por lo que, además de el código inútil que contiene, es un anti-patrón).
const readStatusAll = data => { return new Promise( async (resolve, reject) => { try { const category = await CoreStatus.findAll() resolve(category) } catch(err) { reject(err) } }) }En cambio, puede ser esto:
const readStatusAll = data => { return CoreStatus.findAll(); } La persona que llama recibirá la promesa como valor de retorno y luego puede usar .then() y .catch() o await y try/catch . Dado que no está haciendo nada con el error, aparte de propagarlo, no necesita detectar el error localmente; simplemente puede dejar que se propague de nuevo a la persona que llama.
Su segunda versión simplemente no es correcta en absoluto:
// Promise without Await const readStatusAll = data => { return new Promise( async (resolve, reject) => { CoreStatus.findAll() resolve(category) } }) } Debido a que no está prestando atención a ningún retorno asincrónico de CoreStatus.findAll() , resolverá esta promesa de envoltorio manual mucho antes de que se realice la llamada a la base de datos. De hecho, esto ni siquiera es un código legal ya que tiene un refuerzo inadecuado.
Tal vez quiso llamar a resolve(category) en alguna devolución de llamada o controlador .then() asociado con CoreStatus.findAll() . Pero, incluso si hiciera eso, aún no estaría propagando errores a la persona que llama. Esta no es la manera de hacer las cosas.